iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0

前面幾天都在介紹前端的語言,今天就來講一下後端常用的語言之一
--- PHP

什麼是 PHP ( PHP: Hypertext Preprocessor ) ?

PHP 是一種伺服器端腳本語言,用於開發 Web 應用程式

伺服器端腳本語言意味著它在伺服器上運行,並處理與網站的後端功能相關的任務,例如數據庫查詢、用戶驗證、網頁生成等

怎麼運行 PHP ?

通常我們會將 PHP 部屬成網頁,這裡是兩種在本地部屬成網頁執行的方式

Window

https://ithelp.ithome.com.tw/upload/images/20231003/20162775FsnygCjs2f.png
開瀏覽器
https://ithelp.ithome.com.tw/upload/images/20231003/20162775nI8L09vnf7.png
通常localhost 會對應 xampp/htdocs 的資料夾
https://ithelp.ithome.com.tw/upload/images/20231003/20162775QflbPzpiBJ.png
要執行的PHP檔可以放裡面,然後瀏覽器開http://localhost/你的檔案.phphttp://127.0.0.1/你的檔案.php 就可以看到了

Kali

Kali 中有內建 php 跟 apache2

  • Apache 指令
    • 啟動 Apache2 : sudo service apache2 start

    • 檢查 Apache 是否正在運行 : sudo service apache2 status

      如果 Apache 正在運行,應該會看到類似 "Active: active (running)" 的訊息

    • 關閉 Apache2 : sudo service apache2 stop

php 檔要放在 1/var/www/html/ 底下

  • 用瀏覽器開啟http://localhost/你的檔案.phphttp://127.0.0.1/你的檔案.php

https://ithelp.ithome.com.tw/upload/images/20231003/20162775Fs6PhfsBcp.png

基本語法

Hello PHP !

php 的 code 需要被 <?php?> 包起來`

<?php
    echo "Hello PHP";
    // echo代表將東西印到螢幕上
    // 單行註解
    /* 多行註解 */
?>

變數

php 的變數要用 $ 開頭

<?php
    $a = 1;
    $b = 2;
    $c = $a + $b;
?>

基本型態

  • 整數

    PHP_INT_MAX 可以知道整數最大範圍

  • 浮點數 (0.1)
  • 字串  ("123",'a')
  • 布林值 (true,false)

var_dump() 可以查看變數資訊

<?php
    $a = 123;
    $b = 0.123;
    $str = 'PHP';
    $c = true;

    echo "Hello $str <br>";
    echo 'Hello $str <br>'; 
?>

雙引號字串的 $str 可以被解析成變數, 單引號不會,單印號內會被視為普通文字

運算

在 php 中 + 代表數值相加,.代表字串相接

<?php
    $a = "123";
    $b = "4";
    echo $a+$b; //127
    echo "<br>";
    echo $a.$b; //1234
?>

== 跟 ===

== 只有比較值,而 === 會再比較型態

<?php
    $a = 5;
    $b = "5";
    var_dump($a == $b);    // bool(true) 
    var_dump($a === $b);    // bool(false)
?>
MD5 繞過
<?php
    highlight_file(__FILE__);
    $FROM_INCLUDE = true;
    include("flag.php");
    $msg = "";
    if (isset($_GET['user']) && isset($_GET['password'])) {
        $user = $_GET['user'];
        $password = $_GET['password'];
        $check = "QNKCDZO";
        // the md5 of "QNKCDZO" is 0e830400451993494058024219903391

        if ($user == "admin" && $password != $check && md5($password) == md5($check)) {
            $msg = "Flag: ".$flag;
        } else {
            $msg = "Keep trying!";
        }
    }

    echo $msg;
?>

php 只用==可以當數字處裡,0e開頭的數字都會被視為0

所以只要找到md5後值也是0e開頭的就可以繞過驗證

條件

直接用範例來看 !

範例

根據現在幾點顯示 Good morning! 、 Good afternoon! 、 Good night!

<?php
    date_default_timezone_set("Asia/Taipei");     //設定時區
    $t = date("H"); //獲取當前時間幾點
    if("6" <= $t && $t < "12"){
        echo "Good morning!";
    }
    elseif("12" <= $t && $t < "18"){
        echo "Good afternoon!";
    }
    else{
        echo "Good night!";
    }
?>

迴圈

while

<?php

$i = 1;
while($i <= 5){
    echo $i++;
}


?>

do-while


$j = 1;
do{
    echo $j++;
}while($j <= 5);

for

for($k = 1; $k <= 5; $k++){
    if($k == 5){
        break;
    }
    elseif($k == 3){
        continue;
    }
    echo $k;
}

foreach

$num = array(1, 2, 3, 4, 5);
//$num[] = 12;
//兩種宣告陣列方式

foreach($num as $n){
  echo "$n";
}

超級全域變數

超级全域變數 用途
$_GET 用於獲取透過 HTTP GET 請求傳遞的參數
$_POST 用於獲取透過 HTTP POST 請求傳遞的參數
$_REQUEST 包含了 $_GET$_POST$_COOKIE 的內容,可用於獲取 HTTP 請求中的參數
$_SESSION 用於在不同頁面之間存儲session資料
$_COOKIE 用於訪問通過 HTTP 請求發送到使用者端的 Cookie 資料
$_SERVER 包含了有關伺服器和腳本的信息,如請求的 URL、伺服器的 IP 地址等
$_ENV 用於獲取環境變數的值,通常由伺服器配置或操作系統設定
$_GLOBALS 用於訪問全域作用域中的變數,這是一個包含全域變數的關聯數組

範例

  • $_GET
<?php
    if(isset($_GET['user'])){    //確認有沒有資料
        $name = $_GET['user'];     //從?user得到資料
        echo "Hello, $name";
    }
    else echo "Who are you?";
?>

  • $_SESSION
session_start(); // 啟動session
$_SESSION['user_id'] = 123; // 儲存 user ID

  • $_SERVER
<?php
  echo $_SERVER['PHP_SELF'];     //回傳當前正在執行的檔案名稱
  echo "<br>";
  echo $_SERVER['SERVER_NAME'];     //回傳正在執行腳本的伺服器主機名稱
  echo "<br>";
  echo $_SERVER['HTTP_USER_AGENT'];    //確定訪問網站的瀏覽器和作業系統
  echo "<br>";
  echo $_SERVER['SCRIPT_NAME'];    //目前正在執行的檔案的相對路徑
?>
  • $_ENV
$home_directory = $_ENV['HOME'];

上一篇
Day 17 網頁三兄弟-Javascript
下一篇
Day 19 DVWA 安裝
系列文
學分的追逐,資安的啟程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言